/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package compilador.analisadorSintatico.classe;

import compilador.analisadorLexico.PalavraReservada;
import compilador.analisadorLexico.Token;
import compilador.analisadorLexico.TokenClass;
import compilador.analisadorSintatico.Producao;
import compilador.analisadorSintatico.TokenReader;
import compilador.analisadorSintatico.simboloGramatical.NaoTerminal;
import compilador.analisadorSintatico.simboloGramatical.SimboloGramatical;

/**
 *
 * @author Matheus Cardoso
 */
public class DEC_ATRIBUTO extends Producao{

    @Override
    public void setSimbolo() {
        this.simbolo = new NaoTerminal (this.getClass().getSimpleName());
    }
    
    @Override
    public SimboloGramatical derivar() throws Exception {
        TokenReader tokenReader = TokenReader.getInstance();
        
        Token token = null;
        token = tokenReader.seeCurrent();
        
        NaoTerminal naoTerminal = (NaoTerminal) this.simbolo;
        if(token.getAtributo().equals(PalavraReservada.CHAR) || token.getAtributo().equals(PalavraReservada.INT)){
            naoTerminal.add(new DEC_VARIAVEL().derivar());
        }
        else if(token.getTokenClass().equals(TokenClass.IDENTIFICADOR)){
            naoTerminal.add(new DEC_VARIAVEL().derivar());
        }
        else if(token.getAtributo().equals(PalavraReservada.CONST)){
            naoTerminal.add(new DEC_CONSTANTE().derivar());
        }
        else{
            tokenReader.consome();
            erro(this.getClass().getSimpleName() + " mal formado");
        }
        return this.simbolo;
    }

}
